package com.codeduck.guava.basic;

import com.google.common.base.Preconditions;

import java.util.ArrayList;
import java.util.List;

/**
 * Preconditions: 更容易地测试方法的先决条件。
 *
 * @author: <a href="mailto:codeduck@163.com">Codeduck</a>
 * @createDate: 2022-05-19
 */
public class Demo02 {
    public static void main(String[] args) {
        int i = -1;

        // 检查布尔值是否为真。用于验证方法的参数。
        Preconditions.checkArgument(i >= 0, "Argument was %s but expected nonnegative", i);

        // 检查该值是否为空。
        Preconditions.checkNotNull(null);

        // 检查对象的某些状态，确保涉及调用实例状态的表达式的真值，不依赖于方法参数。
        List<Integer> arr = new ArrayList<>();
        Preconditions.checkState(arr.add(1));
        arr.add(2);

        // 检查索引是否为指定大小的列表、字符串或数组的有效元素索引。不需要直接传递列表、字符串或数组，只需传递其大小即可。返回索引。
        Preconditions.checkElementIndex(2, arr.size()); // arr 的索引范围为 [0,1]，因此2超出了其索引范围，将会抛出异常

        // 检查索引是否为指定大小的列表、字符串或数组的有效位置索引。位置指数可以从0到大小不等。您不需要直接传递列表、字符串或数组; 您只需传递它的大小。返回索引。
        Preconditions.checkPositionIndex(0, arr.size()); // arr 的位置范围为 [0,2]，因此返回其位置索引。
    }
}
